﻿/*
 炉号、牌号
 */

using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.IO;
using System.Data;
using CSharpConnectMySQL;
using MySql.Data.MySqlClient;

using Common;

namespace Dingding.Helper
{
    public class MatPonoNo
    {
        //以GET方式抓取远程页面内容

       


        public static  void  GetPonoNo_DD(ref string Pono_No,ref string sg_sign)
        {
            string str          = Pono_No ;
          


            //7位或者
            try
            {
                //位数
                if (sg_sign.Length>=5 && sg_sign.Length <=7)
                {
                    char[] chars = sg_sign.ToCharArray();

                    if (

                           //33B01是个10B33牌号
                           ( Pono_No == "33B01" || Pono_No == "33B01" )


                           || (sg_sign.Length ==6 
                            &&  ( Char.IsLetter(chars[0]) || (chars[0]=='0')  )  //流号【必须为字母，倒了或字母D识别成数字0了】
                            &&  ( Char.IsDigit(chars[1]) || (chars[1] == 'S') ) //S可能是字母5倒过来的；
                            && ( Char.IsDigit(chars[2]) || (chars[2] == 'S'))
                            && ( Char.IsDigit(chars[3]) || (chars[3] == 'S'))
                            //&& Char.IsDigit(chars[4])
                            && (chars[5]=='1' || chars[5] == '2' || chars[5] == '5') //1号转、2号转炉、5号电炉
                            )

                        || (sg_sign.Length == 7
                            && Char.IsDigit(chars[0]) //异常坯标识
                            && Char.IsLetter(chars[1]) //流号【必须为字母，倒了】
                            && ( Char.IsDigit(chars[2]) || (chars[2] == 'S'))
                            && ( Char.IsDigit(chars[3]) || (chars[3] == 'S'))
                            && ( Char.IsDigit(chars[4]) || (chars[4] == 'S'))
                            //&& Char.IsDigit(chars[5])
                            && (chars[6] == '1' || chars[6] == '2' || chars[6] == '5')
                            )
                        )
                    {

                        Pono_No = StringUtil.first_to_last(sg_sign);

                        sg_sign = StringUtil.first_to_last(str) ;
                    }
                }


                //只喷了炉号，钢种手写的
                if (sg_sign.Length >= 6 && Pono_No.Length < 2)
                {
                    char[] chars = sg_sign.ToCharArray();

                    if (       ( Char.IsDigit(chars[0]) || (chars[0] == 'S')) //S可能是字母5倒过来的；
                            && ( Char.IsDigit(chars[2]) || (chars[0] == 'S'))
                            && ( Char.IsDigit(chars[3]) || (chars[0] == 'S'))
                            && ( Char.IsDigit(chars[4]) || (chars[0] == 'S'))
                            && Char.IsLetter(chars[5])
                            )
                    {
                        Pono_No = sg_sign;
                        sg_sign = str;//
                    }
                }


            }
            catch (Exception ex)
            {
                ClassMyFile.WriteLog("GetPonoNo_DD ex=[" + ex.Message + "]", "PostPono_No_GetV1");                
            }
           


        }


        /// <summary>
        /// 补位、修正字母
        /// </summary>
        /// <param name="Pono_No"></param>
        /// <returns></returns>
        public static string GetPonoNo_OK(string Pono_No )
        {
            string strResult = Pono_No;

            //7位或者
            try
            {
                strResult = strResult.Replace("11G", "110");
                strResult = strResult.Replace("S", "5");//炉号中不可能有S字符
                
                //炉号中也不可能有T---------add by wb 2025-09-15
                strResult = strResult.Replace("T", "7");//炉号中不可能有7字符


                strResult = strResult.Replace("i", "1");//炉号中不可能有i
                 
                 

                char[] chars = Pono_No.ToCharArray();

              
                int length = chars.Length;



                //1位炼钢号 + 4位流水号 + 1流号 + 异常钢坯
                // 1缺位问题；***************************************************************
                //1.1目前仅仅发下首个字母识别不出来； //[除外，]
                if (
                    (length ==5 && Char.IsLetter(chars[4]) )
                    ||(length == 6 && Char.IsLetter(chars[4]) && chars[4]!='C') //第为C有可能是0，1683CD其实为16830D
                    )
                { 
                    //11 识别成H
                    if (chars[0]=='H')
                    {
                        strResult = "11" + strResult.Substring(1, length - 1);
                    }
                    //首位1未识别；[已经有2个11的不再补1]
                    else if (strResult.Substring(0, 2)!="11")
                    {
                        strResult = "1" + strResult;
                    }
                    //

                }
                ////1.2目前仅仅发下首个字母识别不出来；缺2位
                else if 
                    (
                    (length == 4 && Char.IsLetter(chars[3]))
                   || (length == 5 && Char.IsLetter(chars[3]))
                    )
                {
                    strResult = "11" + strResult;
                }



             


                chars = strResult.ToCharArray();
                length = chars.Length;

                //2多了1位***************************************************************
                //多了第一位；
                if (length >=7 && Char.IsLetter(chars[6]) && !(Char.IsLetter(chars[5])) )
                { 
                    //第1位多了字母A，多了1
                    if (chars[0]=='A' || chars[0] == '1')
                    {
                        strResult = strResult.Substring(1, length - 1);
                    } 
                }

                //多了最后一位；
                if (length >= 7 && Char.IsLetter(chars[5]) && Char.IsLetter(chars[6]) )
                {
                    //第1位多了字母A，多了1
                    if (chars[6] == 'i')
                    {
                        strResult = strResult.Substring(0, length - 1);
                    }
                }


                 

                chars = strResult.ToCharArray();
                length = chars.Length;

                //3.字母识别错误问题；******************************************************************
                for (int i = 0; i < length; i++)
                {
                    //2.1字母位识别错误；【第2位可能为字母，第6位必须字母（）】
                    if (i == 1)
                    {
                        //判定依据第【第二部可能变动太大的】，[除了第2位之外的，其余的前5位相同，在60分钟内>=3即可
                        if ( Char.IsLetter(chars[i]) && length>=5)
                        {   
                            //0识别成C,D,G
                            // 2025-10-03；此时批号有字母C,D是很正常的；后面2026年1月份再考虑放开； 
                                               
                            //if (GetPreCount(strResult.Substring(0, 1) + "0"+ strResult.Substring(2,3), "30") >=3 )
                            //{
                            //    chars[i] = '0';
                            //}


                        }
                        else //数字识别错误；
                        {
                            //1识别成4了；
                            if (chars[i]=='4' && length >= 5)
                            {
                                if (GetPreCount(strResult.Substring(0, 1) + "1" + strResult.Substring(2, 3), "30") >2)
                                {
                                    chars[i] = '1';
                                } 
                            } 
                        }
                     

                    } 
                    else if (i == 5) //必为字母；
                    {
                        //字母D识别成字母0
                        if (chars[i] == '0')
                        {
                            chars[i] = 'D';
                        }

                    }
               
                    else if ( i != 1 && i != 5 ) //数字位识别错误
                    {
                        //2.数字被识别成字母了，肯定有问题；
                        if (Char.IsLetter(chars[i]) )
                        {
                            //C;G字母识别错误
                            if (chars[i] == 'G' || chars[i] == 'C')
                            {
                                chars[i] = '0';
                            }
                            //5识别成B了
                            if (chars[i] == '5')
                            {
                                chars[i] = 'B';
                            }

                            //其他字母问题 

                        }
                        else //数字被识别成错误的数字；
                        {

                        }
                    }
                    else if (i == 6) //必为数字
                    {
                        //最后一位异常坯，D识别成0 
                        if (chars[i] == 'D')
                        {
                            chars[i] = '0'; 
                        }
                    }

                }

                strResult = new string(chars);
                
            }
            catch (Exception ex)
            {
                strResult = ex.Message;
            }
            return strResult;
        }




        public static int GetPreCount(string code,string minute)
        {
          

            //获取需要修改的记录；
            string sql = " select count(*) num from tmm0001_ocr_wb "
                            + "  where ip =1  "
                            + "  and REC_CREATE_TIME > UNIX_TIMESTAMP(DATE_SUB(NOW(3), INTERVAL "+ minute + " MINUTE)) * 1000 "
                            + "  and pono_no like '"+ code + "%' " 
                            ;

            //tmm0001_ocr_wb pono_no  可能一直是错误的；【因为其不修正，即客户不及时修正】
            sql = " select count(*) num from t_material "
                            + "  where flow_id = 'jiaReLu'  "
                            + "  and CREATE_TIME > UNIX_TIMESTAMP(DATE_SUB(NOW(3), INTERVAL " + minute + " MINUTE)) * 1000 "
                            + "  and heat_number like '" + code + "%' "
                            ;


             

          DataSet dataSet = MySqlHelper2.GetDataSet(sql);

            int num = 0; 

            if (dataSet.Tables.Count > 0 && dataSet.Tables[0].Rows.Count > 0) 
            {
               num = Int16.Parse(dataSet.Tables[0].Rows[0][0].ToString());
            } 

            return num;
            
        }





    }
}